package java_0554_generic;

import java.util.ArrayList;
import java.util.List;

public class GenericExtends {
    public static void main(String[] args) {
        Object o = new String("o");
        //泛型没有继承性
//        List<Object> list = new ArrayList<String>();

        List<Object> list1 = new ArrayList<>();
        List<String > list2 = new ArrayList<>();
        List<A> list3 = new ArrayList<>();
        List<B> list4 = new ArrayList<>();
        List<C> list5 = new ArrayList<>();

//        printCollection2(lsit1);错误
//        printCollection2(list2);错误
        printCollection2(list3);
        printCollection2(list4);
        printCollection2(list5);

        printCollection3(list1);
//        printCollection3(list2);
        printCollection3(list3);
//        printCollection3(list4);子类
//        printCollection3(list5);子类

    }

    //2) <?> :支持任意泛型类型
    public static void printCollection1(List<?> c) {
        System.out.println("");
    }

    //3) <? extends A>:支持A类以及A类的子类，规定了泛型的上限
    public static void printCollection2(List<? extends A> c) {
        System.out.println("");
    }

    //4) <? super A>:支持A类以及A类的父类，不限于直接父类，规定了泛型的下限
    public static void printCollection3(List<? super A> c) {
        System.out.println("");
    }
}

class A {
}

class B extends A {
}

class C extends B {
}
